from sqlalchemy import Table, Column, Integer, String
from sqlalchemy.orm import mapper
from database import metadata, db_session, init_db, engine
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship, backref
from proyecto import Proyecto, proyecto
from usuario import Usuario, usuario
from tipoItem import TipoItem, tipoitem
from item import Item, item
from tipoCampo import TipoCampo, tipocampo
from tipoRelacion import TipoRelacion, tiporelacion


class Relacion(object):
    """ Clase que define el modelo de la tabla relacion entre items """
    
    def __init__(self, item1=None, item2=None, tipo=None):
        """ Metodo init """
        self.item1 = item1
        self.item2 = item2
        self.tipo = tipo

    def __repr__(self):
        return self.item1.nombre + " (" + self.tipo.nombre + ") " + self.item2.nombre


relacion = Table('relacion', metadata,
#     Column('idrelacionitem', Integer, primary_key=True),
    Column('iditem1', Integer, ForeignKey('item.iditem'), primary_key=True),
    Column('iditem2', Integer, ForeignKey('item.iditem'), primary_key=True),
    Column('idtipo', Integer, ForeignKey('tiporelacion.idtiporelacion'))

)
mapper(Relacion, relacion, properties={
    'item1' : relationship(Item, backref='hijos', primaryjoin= (Item.iditem == relacion.c.iditem1)),
    'item2' : relationship(Item, backref='padres', primaryjoin= (Item.iditem == relacion.c.iditem2)),
    'tipo' : relationship(TipoRelacion, backref='relaciones')
})
 
# relaci= db_session().query(Relacion).all()
# print relaci
